package game;
import game.User;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
/*游戏记录面板
 * 此时的this（既是窗口又是监听器）
 * 1个下拉框
 * 2 按钮 个人 榜单（简单） 总榜
 * 3.表格展示分数
 * 將JFrame改爲JPanel 作爲主窗口的面板
 */
public class RecordJPanel extends JPanel implements ActionListener{
	private int screenW = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
	private int screenH = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
	private User user;
	//北部放按钮  中间放表格
	private JPanel northJPanel,centerJPanel;
	//下拉框
	private JComboBox<String> levelCombox;
	//两个按钮 个榜  总榜
	private JButton selfRecord,totalRecord;
	//一个表格
	private JTable table;
	private String[] head = {"姓名","分数","难度"};
	//private  String[][] data;
	List<User> userList = RecordUtil.readRecord();
	List<User> filterUserList;
	public RecordJPanel(User user) {
		//設置邊界佈局
	    this.setLayout(new BorderLayout());
		
		this.user =user;
		// 初始化组件
		initComponet();
			// 标题
			//this.setTitle("游戏记录");
			// 大小
			//this.setSize(400,500);
			// 位置
			//this.setLocation((screenW-this.getWidth())/2, (screenH-this.getHeight())/2);
			// 是否可扩大
		//	this.setResizable(false);
			// 关闭窗口
		//	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			// 是否可视化
			//this.setVisible(true);
		
	}
	private void initComponet() {
		//北边布局
		northJPanel = new JPanel();
		levelCombox = new JComboBox<String>(new String[] {"Simple","Common","Difficult"});
		selfRecord = new JButton("个榜");
				totalRecord = new JButton("总榜");
		northJPanel.add(levelCombox);
		northJPanel.add(selfRecord);
		northJPanel.add(totalRecord);
		//中间组件
		centerJPanel = new JPanel();
		centerJPanel.setLayout(new BorderLayout());
		 String[][] data = getData(userList);
		//表格 表头和数据
         table = new JTable(data,head);
         centerJPanel.add(table.getTableHeader(),BorderLayout.NORTH);
         centerJPanel.add(table);
         
		this.add(northJPanel,BorderLayout.NORTH);
		this.add(centerJPanel);
		//第一次筛选数据   难度级别
		levelCombox.addActionListener(this);
		//这个数据是第一次筛选数据后再筛选数据
		selfRecord.addActionListener(new MyMouseAction());
		
		
		
	}
	private String[][] getData(List<User> list) {
		String[][] data = new String[list.size()][3];
		for (int i = 0; i < list.size(); i++) {
			User user = list.get(i);
			//将集合的数据取出来 放到  数组的每一行
			data[i] = new String[] {
					user.getName(),
					user.getScore()+"",
					user.getLevel()
			};
			
		}
		return data;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		 filterUserList = new ArrayList<>();
//		- 拿到当前选择的字符串
		String level = (String)levelCombox.getSelectedItem();
//		- 比较集合中的数据,如果相等,重新放到表格中下·
		for(User u : userList) {
			// 如果是同一个级别
			if(u.getLevel().equals(level)) {
				filterUserList.add(u);
			}
		}
		String[][] data = getData(filterUserList);
		// 需要通过setModel(model)重新给表格数据赋值
		TableModel model = new DefaultTableModel(data,head);
		table.setModel(model);
	}
class MyMouseAction implements ActionListener{
	@Override
	public void actionPerformed(ActionEvent e) {
		//在第一个监听器之外获取  filterList 数据
		if(filterUserList == null) {
			filterUserList = new ArrayList<>();
		//- 比较集合中的数据,如果相等,重新放到表格中
		for(User u : userList) {
			// 如果是同一个级别
			if(u.getLevel().equals("简单")) {
				filterUserList.add(u);
			}
		}
		String[][] data = getData(filterUserList);
		// 需要通过setModel(model)重新给表格数据赋值
		TableModel model = new DefaultTableModel(data,head);
		table.setModel(model);//第二次筛选
		}
		List<User> temp = new ArrayList<>();
		//个榜   姓名和集合  是否相等（第一次筛选的集合）
		for(User u : filterUserList) {
			if(u.getName().equals(user.getName())) {
				temp.add(u);
		}
	 }		
		String[][] data = getData(temp);
		table.setModel(new DefaultTableModel(data,head));
		//System.out.println(temp);
    }	
  }
}



